[INV-MIGRATION-170] Создать таблицу menu_db.menu_templates

Развертывание таблиц кулинарной истории и порционных балансов готовых блюд

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи

  • Инструкция по шагам: Выполнить DDL-миграцию для создания таблиц фиксации истории ручной готовки и регистрации сущностей готовых блюд (cooking_history) с поддержкой дробного квантования («порционного откусывания»). Таблицы создаются внутри fridge_db для обеспечения ACID-целостности мутации балансов (Шаг 8) без распределенных транзакций.
-- Скрипт миграции для fridge_db (Контур INVENTORY)
CREATE TABLE IF NOT EXISTS fridge_db.cooking_history (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    home_group_id VARCHAR(64) NOT NULL,
    trace_id VARCHAR(128) NOT NULL,            -- X-Request-ID для сквозного аудита
    dish_name VARCHAR(255) NOT NULL,          -- Очищенное цензором название блюда
    space_type VARCHAR(16) NOT NULL,           -- 'HOME' / 'OFFICE'
    total_portions NUMERIC(5, 2) NOT NULL,     -- Исходное количество порций
    remaining_portions NUMERIC(5, 2) NOT NULL, -- Текущий остаток порций под списание
    spent_ingredients JSONB NOT NULL,          -- Массив списанного сырья: [{"food_element_id": "X", "quantity": 100}]
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Индекс для отображения содержимого холодильника пользователю и порционного списания
CREATE INDEX IF NOT EXISTS idx_cooking_active_dishes 
ON fridge_db.cooking_history (home_group_id) 
WHERE remaining_portions > 0.00;